home *** CD-ROM | disk | FTP | other *** search
- /* NET/ROM support definitions */
-
- #define NR3HLEN 15 /* length of a NET/ROM level 3 hdr */
- #define NR3NODESIG 0xff /* signature for nodes broadcast */
- #define NR3NODEHL 7 /* nodes bc header length */
- #define NR4HLEN 5 /* length of a NET/ROM level 4 hdr */
- #define NR4ILEN (256-NR3HLEN-NR4HLEN) /* max length of info at level 4 */
-
- #define NRNUMCHAINS 53 /* number of chains in the */
- /* neighbor and route hash tables */
- #define NRRTDESTLEN 21 /* length of destination entry in */
- /* broadcast */
- #define NRDESTPERPACK 11 /* maximum number of destinations per */
- /* nodes packet */
-
- #define NR4NUMCIRC 20 /* maximum number of circuits */
-
- #if (!defined(MSDOS) || defined(LARGEDATA))
- #define NETROM4 1 /* level-4 only for lots of mem */
- #endif
-
- /* Internal representation of NET/ROM network layer header */
- struct nr3hdr {
- struct ax25_addr source; /* callsign of origin node */
- struct ax25_addr dest; /* callsign of destination node */
- unsigned ttl; /* time-to-live */
- };
-
- /* Internal representation of NET/ROM routing broadcast destination */
- /* entry */
- struct nr3dest {
- struct ax25_addr dest; /* destination callsign */
- char alias[7]; /* ident, upper case ASCII, blank-filled */
-
- struct ax25_addr neighbor; /* best-quality neighbor */
- unsigned quality; /* quality of route for this neighbor */
- };
-
- /* Internal representation of NET/ROM transport layer header */
- struct nr4hdr {
- unsigned opcode; /* transport layer opcode */
- #define NR4OMASK 0x0f /* mask to isolate opcode */
- #define NR4MORE 0x20 /* more follows flag */
- #define NR4NAK 0x40 /* NAK flag */
- #define NR4CHOKE 0x80 /* CHOKE flag */
- #define NR4CREFUSE 0x80 /* connect request refused flag */
-
- #define NR4PID 0 /* network protocol extension */
- #define NR4CONRQ 1 /* connect request */
- #define NR4CONACK 2 /* connect acknowledge */
- #define NR4DISRQ 3 /* disconnect request */
- #define NR4DISACK 4 /* disconnect acknowledge */
- #define NR4INFO 5 /* information */
- #define NR4INFACK 6 /* information acknowledge */
- unsigned char family,proto; /* network extension family/protocol */
- struct ckt {
- unsigned char index; /* circuit index */
- unsigned char id; /* circuit id */
- } your,my;
- unsigned char txseq; /* transmit sequence number */
- unsigned char rxseq; /* receive sequence number */
- unsigned window; /* proposed/accepted window size */
- struct ax25_addr suser; /* callsign of originating user */
- struct ax25_addr snode; /* callsign of originating node */
- };
-
- /* NET/ROM interface info. linked to interface struct */
- struct nriface {
- char alias[7]; /* alias for this interface's node */
- /* broadcasts */
- unsigned char quality; /* NET/ROM link quality estimate */
- char uplink; /* uplink allowed here? */
- };
-
- #define NULLNRIFACE (struct nriface *)0
-
- /* NET/ROM neighbor table structure */
- struct nrnbr_tab {
- struct nrnbr_tab *next; /* doubly linked list pointers */
- struct nrnbr_tab *prev;
- char call[AXALEN*3]; /* call of neighbor + 2 digis max */
- struct interface *interface; /* interface of neighbor's port */
- unsigned refcnt; /* how many routes for this neighbor? */
- unsigned failcnt; /* failure count on AX.25 link */
- };
-
- #define NULLNTAB (struct nrnbr_tab *)0
-
-
- /* A list of these structures is provided for each route table */
- /* entry. They bind a destination to a neighbor node. If the */
- /* list of bindings becomes empty, the route table entry is */
- /* automatically deleted. */
-
- struct nr_bind {
- struct nr_bind *next; /* doubly linked list */
- struct nr_bind *prev;
- unsigned char quality; /* quality estimate */
- unsigned char obsocnt; /* obsolescence count */
- unsigned char flags;
- #define NRB_PERMANENT 0x01 /* entry never times out */
- struct nrnbr_tab *via; /* route goes via this neighbor */
- };
-
- #define NULLNRBIND (struct nr_bind *)0
-
-
- /* NET/ROM routing table entry */
-
- struct nrroute_tab {
- struct nrroute_tab *next; /* doubly linked list pointers */
- struct nrroute_tab *prev;
- struct nrroute_tab *sort; /* link pointer when sorting */
- char alias[7]; /* alias of node */
- struct ax25_addr call; /* callsign of node */
- unsigned num_routes; /* how many routes in bindings list? */
- struct nr_bind *routes; /* list of neighbors */
- };
-
- #define NULLNRRTAB (struct nrroute_tab *)0
-
-
- /* description of a NET/ROM level 4 circuit */
- struct nr_circ {
- struct ckt my,your; /* circuit identifiers */
- struct ax25_addr suser; /* callsign of originating user */
- struct ax25_addr snode; /* callsign of originating node */
- struct ax25_addr dnode; /* callsign of destination node */
- unsigned window; /* proposed/accepted window size */
-
- int state; /* connection state */
- #define NR4STDISC 0 /* disconnected */
- #define NR4STCPEND 1 /* connection pending */
- #define NR4STCON 2 /* connected */
- #define NR4STDPEND 3 /* disconnect requested locally */
-
- unsigned char txseq; /* transmit sequence number */
- unsigned char txack; /* ack'ed transmit sequence */
- unsigned char rxseq; /* receive sequence number */
-
- unsigned char mystate; /* state to send to other side */
- char r_choked; /* choke received from remote */
- char s_choked; /* sent choked myself */
-
- char d_reason; /* disconnect reason */
- #define NR4REDISC 0 /* disconnected */
- #define NR4REFAIL 1 /* failed */
- #define NR4REBUSY 2 /* busy (CHOKE) */
-
- int retries; /* number of re-tries done */
-
- struct mbuf *txq; /* transmit queue */
- struct mbuf *rxasm; /* receive assembly buffer */
- struct mbuf *rxq; /* receive queue */
-
- struct timer trtimer; /* transport timer */
- struct timer acktimer; /* ack delay timer */
- struct timer noacttim; /* no-activity timer */
-
- void (*r_upcall)(); /* receive upcall */
- void (*t_upcall)(); /* transmit upcall */
- void (*s_upcall)(); /* state change upcall */
-
- char *user; /* user pointer */
- };
-
- #define NULLNRCIRC (struct nr_circ *)0
-
- /* description of a NET/ROM level 7 user */
-
- struct nr_user {
- struct nr_user *next;
- struct nr_user *prev;
- struct ax25_cb *ax25_cb[2]; /* AX.25 link control blocks */
- struct nr_circ *nrcirc[2]; /* NET/ROM level 4 control blocks */
- #define NRU_UP 0 /* uplink (connecting user) cb's */
- #define NRU_DOWN 1 /* downlink (connected user) cb's */
- struct interface *iface; /* interface for connects */
- int errors; /* command errors made sofar */
- };
- #define NULLNRUSER (struct nr_user *)0
-
-
- /* The NET/ROM nodes broadcast filter structure */
- struct nrnf_tab {
- struct nrnf_tab *next; /* doubly linked list */
- struct nrnf_tab *prev;
- struct ax25_addr neighbor; /* call of neighbor to filter */
-
- struct interface *interface; /* filter on this interface */
- };
-
- #define NULLNRNFTAB (struct nrnf_tab *)0
-
-
- /* The neighbor hash table (hashed on neighbor callsign) */
- extern struct nrnbr_tab *nrnbr_tab[NRNUMCHAINS];
-
- /* The routes hash table (hashed on destination callsign) */
- extern struct nrroute_tab *nrroute_tab[NRNUMCHAINS];
-
- /* The circuit table (index on circuit index) */
- extern struct nr_circ *nr_circ[NR4NUMCIRC];
-
- /* The nodes broadcast filter table */
- extern struct nrnf_tab *nrnf_tab[NRNUMCHAINS];
-
- /* filter modes: */
- #define NRNF_NOFILTER 0 /* don't filter */
- #define NRNF_REJECT 1 /* reject broadcasts from stations in list */
- #define NRNF_ACCEPT 2 /* accept broadcasts from stations in list */
- #define NRNF_EXCLUSIVE 3 /* same as accept but only traffic from listed */
-
- /* The filter mode */
- extern unsigned nr_nfmode;
-
- /* The time-to-live for NET/ROM network layer packets */
- extern unsigned nr_ttl;
-
- /* The obsolescence count initializer */
- extern unsigned obso_init;
-
- /* The threshhold at which routes becoming obsolete are not broadcast */
- extern unsigned obso_minbc;
-
- /* The quality threshhold below which routes in a broadcast will */
- /* be ignored */
- extern unsigned nr_autofloor;
-
- /* The maximum fail count on AX.25 links to neighbors. */
- /* When this is exceeded, all routes via this neighbor are */
- /* dropped from the table. (except the permanent routes) */
- extern unsigned nr_maxfail;
-
- /* The maximum number of packets on an AX.25 queue to a */
- /* neighbor. If exceeded, an alternative route is selected */
- /* or the packet is dropped. */
- extern unsigned nr_maxqueue;
-
- /* The maximum number of routes maintained for a destination. */
- /* If the list fills up, only the highest quality routes are */
- /* kept. This limiting is done to avoid possible over-use of */
- /* memory for routing tables in closely spaced NET/ROM networks. */
- extern unsigned nr_maxroutes;
-
- /* a indication that nodes without tcp/ip alias should (not) be */
- /* included in the nodes list broadcasted by this node */
- extern unsigned nr_tcpip;
- extern char nr_aliasip[];
- #define NRT_NORM 0 /* no special handling */
- #define NRT_ILNK 1 /* interlink mode */
- #define NRT_NOBR 2 /* don't broadcast */
- #define NRT_IGN 3 /* don't even register them */
- #define NR_TCPIP "#TCPIP" /* the magic alias (by default) */
-
- /* a list of nodes that is not allowed to appear in the nodelist */
- extern struct ax25_call *nr_excl[];
-
- /* The netrom pseudo-interface */
- extern struct interface *nr_interface;
-
- /* File to send on INFO command from NET/ROM user */
- extern char nr_infname[];
-
- #ifdef NETROM4
- /* Transport timeout (seconds) */
- extern unsigned nr_trtimeout;
-
- /* Transport maximum tries */
- extern unsigned nr_trtries;
-
- /* Transport acknowledge delay (seconds) */
- extern unsigned nr_trackdelay;
-
- /* Transport busy delay (seconds) */
- extern unsigned nr_trbusdelay;
-
- /* Transport requested window size */
- extern unsigned nr_trwindow;
-
- /* Congestion control treshold (frames) */
- extern unsigned nr_trbacklog;
-
- /* No-activity timeout (seconds) */
- extern unsigned nr_noactive;
-
- /* Interface that's to be the "LAP" (default for connects) */
- extern struct interface *nr_lap;
- #endif
-
- /* Functions */
- extern char *htonnrdest();
- extern char *nr_fmtcall();
- extern char *nr_getroute();
- extern int nr4_send();
- extern int nr_nfadd();
- extern int nr_nfdrop();
- extern int nr_rnb_drop();
- extern int nr_rt_add();
- extern int nr_rt_drop();
- extern int ntohnrdest();
- extern struct ax25_addr *nr_scall();
- extern struct mbuf *htonnr3();
- extern struct mbuf *htonnr4();
- extern struct mbuf *nr4_recv();
- extern struct nr_circ *nr4_conn();
- extern struct nrnbr_tab *find_nrnbr();
- extern struct nrroute_tab *find_nralias();
- extern struct nrroute_tab *find_nrroute();
- extern void nruserdump();
-